<?php

class PaqTecnologicoController extends AppController {

    var $name = 'PaqTecnologico';
    var $uses = array('Tienda', 'Integrador', 'Reporte', 'Rubro', 'Familia', 'FamiliaMaterial', 'Receta', 'Postgres', 'Material', 'Clasificacion', 'ReporteSql', 'Logsql', 'Subclasificacion', 'Unidadmedida', 'Tipoarticulo', 'Cargosimpuesto', 'MaterialImpuesto', 'Supervisacion','MaterialSupervisacion');
    var $helpers = array('Html', 'Ajax', 'Javascript', 'Vista', 'Interfaz', 'Json');
    var $layout = "ajax";
    var $components = array('Utilitario', 'Interfaz', 'Vista', 'Query'/* ,'RequestHandler','DebugKit.Toolbar' */);

    function beforeFilter() {
        $this->validar();
    }

    public function grupos($busq = null) {

        $this->permisos_menu_individual('GRUPOS DE PRODUCTOS');
        $this->Vista->title("Grupo de Productos");

        $listadoGrupos = $this->Familia->find('all', array('conditions' => array('Familia.id >' => '0'), 'order' => 'Familia.nombre'));
        //$listadoGrupos = $this->Familia->find('all', array('fields' => 'Familia.id, Familia.nombre, Familia.unidadmedida_id, Familia.descripcion', 'conditions' => array('Familia.id >' => '0'), 'order' => 'Familia.nombre'));
        $this->set('listadoGrupos', $listadoGrupos);
    }

    public function nuevogrupo() {

        $this->permisos_accion_individual('GRUPOS DE PRODUCTOS', 'NUEVO');
        $listaUnidades = $this->Unidadmedida->find('list', array('fields' => 'Unidadmedida.id, Unidadmedida.nombre', 'conditions' => array('Unidadmedida.id >' => '0', 'Unidadmedida.estatus' => 1), 'order' => 'Unidadmedida.nombre'));
        $this->set('listaUnidades', $listaUnidades);
    }

    public function guardargrupo() {

        $data = $this->request->data;
        if (!$this->Vista->empyt($data)) {
            extract($data);
            if (!$this->Vista->verifica('Familia', 'nombre', $nombre, 'nombre')) {

                $familia['Familia']['nombre'] = $this->Utilitario->mayuscula($nombre);
                $familia['Familia']['descripcion'] = $this->Utilitario->mayuscula($descripcion);
                $familia['Familia']['unidadmedida_id'] = $unidadmedida_id;
                // falta guardar en materia impuesto
                if ($this->Familia->save($familia)) {
                    $this->Vista->cerrar_ventana($vent_filtro);
                } else {
                    $this->Vista->mensaje("Ocurrio un error actualizando", 'ERROR');
                    $this->Familia->query('ROLLBACK');
                }
            }
            else
                $this->Vista->mensaje("Nombre duplicado del grupo", 'ERROR');
        }

        $this->grupos();
        $this->render('grupos');
    }

    public function modificargrupo($id = null) {

        $this->permisos_opcion_individual('GRUPOS DE PRODUCTOS', 'ESTATUS', 'MODIFICAR');
        $id = $this->Interfaz->id($id);
        $grupo = $this->Familia->find('all', array('conditions' => array('Familia.id' => $id)));
        $this->set('grupo', $grupo);

        $listaUnidades = $this->Unidadmedida->find('list', array('fields' => 'Unidadmedida.id, Unidadmedida.nombre', 'conditions' => array('Unidadmedida.id >' => '0', 'Unidadmedida.estatus' => 1), 'order' => 'Unidadmedida.nombre'));
        $this->set('listaUnidades', $listaUnidades);
    }

    public function actualizargrupo() {

        $data = $this->request->data;
        if (!$this->Vista->empyt($data)) {
            extract($data);
            $id = $this->Interfaz->id($id);
            if (!$this->Vista->verifica('Familia', 'nombre', $nombre, 'nombre', $id)) {

                $familia['Familia']['id'] = $id;
                $familia['Familia']['nombre'] = $this->Utilitario->mayuscula($nombre);
                $familia['Familia']['descripcion'] = $this->Utilitario->mayuscula($descripcion);
                $familia['Familia']['unidadmedida_id'] = $unidadmedida_id;

                if ($this->Familia->save($familia)) {
                    $this->Vista->cerrar_ventana($vent_filtro);
                } else {
                    $this->Vista->mensaje("Ocurrio un error actualizando", 'ERROR');
                    $this->Familia->query('ROLLBACK');
                }
            }
            else
                $this->Vista->mensaje("El Nombre del grupo ya existe", 'ERROR');
        }
        $this->grupos();
        $this->render('grupos');
    }

    public function cargarmaterial($codFamCodi = null) {        

        $this->permisos_opcion_individual('GRUPOS DE PRODUCTOS', 'ESTATUS', 'AGREGAR');
        $codFam = $this->Interfaz->id($codFamCodi);
        
        $listadoMateriales = $this->FamiliaMaterial->find('all', array('conditions' => array('FamiliaMaterial.familia_id' => $codFam),  'order' => 'Material.nombre'));
        $this->set('listadoMateriales', $listadoMateriales);

        $this->set('codFam', $codFamCodi);
    }

    public function agregarmaterial($codFamCodi = null, $idMateCodi = null, $equivalenciaMaterial = null, $ventana = null) {

        $codFam = $this->Interfaz->id($codFamCodi);
        $idMate = $this->Interfaz->id($idMateCodi);

        $materialExiste = $this->FamiliaMaterial->find('first', array('conditions' => array('FamiliaMaterial.familia_id' => $codFam, 'FamiliaMaterial.material_id' => $idMate)));

        if(count($materialExiste) == 0 and $equivalenciaMaterial > 0) {
            $arregloGuardar['FamiliaMaterial']['familia_id'] = $codFam;
            $arregloGuardar['FamiliaMaterial']['material_id'] = $idMate;
            $arregloGuardar['FamiliaMaterial']['equivalencia'] = $this->Interfaz->miles_postgres($equivalenciaMaterial);
            
            $this->FamiliaMaterial->save($arregloGuardar);
            $this->set('codFam', $codFamCodi);
            $this->set('idMate', $idMateCodi);
            $this->set('equivalencia', $equivalenciaMaterial);

            $material = $this->Material->find('first', array('conditions' => array('Material.id' => $idMate)));
            $this->set('datosMaterial', $material);

            $this->Vista->mensaje("SE AGREGO EL PRODUCTO AL GRUPO EXITOSAMENTE", 'EXITO');
            $this->Vista->cerrar_ventana($ventana);
        }
        else {
            if($equivalenciaMaterial > 0) {
                $this->Vista->mensaje("El material ya existe en el grupo", 'ERROR');
            }
            else {
                $this->Vista->mensaje("La Cantidad de equivalencia debe ser mayor a Cero", 'ERROR');
            }
            $this->render('../' . PRINCIPAL . '/mensajes');
        }

    }

    public function actualizarequivalencia($idFamiliaMaterial = null, $random = null, $equivalenciaMaterial = null, $ventana = null) {

        $idFamiliaMaterial = $this->Interfaz->id($idFamiliaMaterial);

        $existeFamiliaMaterial = $this->FamiliaMaterial->find('first', array('conditions' => array('FamiliaMaterial.id' => $idFamiliaMaterial)));

        if(count($existeFamiliaMaterial) >= 0 and $equivalenciaMaterial > 0) {

            $arregloGuardar['FamiliaMaterial']['id'] = $idFamiliaMaterial;
            $arregloGuardar['FamiliaMaterial']['equivalencia'] = $this->Interfaz->miles_postgres($equivalenciaMaterial);
            
            $this->FamiliaMaterial->save($arregloGuardar);

            $this->Vista->mensaje("SE ACTUALIZO LA EQUIVALENCIA DEL PRODUCTO EXITOSAMENTE", 'EXITO');

            echo '<script type="text/javascript">
                    document.getElementById("tdEquiv_'. $random . '").innerHTML = "' . $equivalenciaMaterial . '";
                </script>';

            $this->Vista->cerrar_ventana($ventana);
        }
        else {
            $msjError = (count($existeFamiliaMaterial) > 0) ? 'La Cantidad de equivalencia debe ser mayor a Cero' : 'El producto ya no existe en el grupo' ;
            
            $this->Vista->mensaje($msjError, 'ERROR');
        }

        $this->render('../' . PRINCIPAL . '/mensajes');
    }

    public function indicarmaterial($codFamCodi = null, $idMateCodi = null) {

        $codFam = $this->Interfaz->id($codFamCodi);
        $idMate = $this->Interfaz->id($idMateCodi);

        $materialExiste = $this->FamiliaMaterial->find('first', array('conditions' => array('FamiliaMaterial.material_id' => $idMate)));

        if(count($materialExiste) == 0) {
            
            $this->set('codFam', $codFamCodi);
            $this->set('idMate', $idMateCodi);

            $material = $this->Material->find('first', array('conditions' => array('Material.id' => $idMate)));
            $this->set('datosMaterial', $material);
        }
        else {

            $this->Vista->mensaje("El material ya existe en el grupo: " . $materialExiste['Familia']['nombre'], 'ERROR');
            $this->render('../' . PRINCIPAL . '/mensajes');
        }
    }

    public function editarequivalencia($codFamCodi = null, $idMateCodi = null, $random = null) {

        $codFam = $this->Interfaz->id($codFamCodi);
        $idMate = $this->Interfaz->id($idMateCodi);

        $materialExiste = $this->FamiliaMaterial->find('first', array('conditions' => array('FamiliaMaterial.familia_id' => $codFam, 'FamiliaMaterial.material_id' => $idMate)));

        if(count($materialExiste) > 0) {
            
            $this->set('codFam', $codFamCodi);
            $this->set('idMate', $idMateCodi);
            $this->set('random', $random);
            $this->set('dataMaterial', $materialExiste);

            $material = $this->Material->find('first', array('conditions' => array('Material.id' => $idMate)));
            $this->set('datosMaterial', $material);
        }
        else {
            $this->Vista->mensaje("El material no existe en el grupo", 'ERROR');
            $this->render('../' . PRINCIPAL . '/mensajes');
        }
    }


    public function buscarmaterial($codFam = null, $para = null) {

        if (isset($para) && !empty($para) && !empty($codFam)) {
            $condiciones['Material.id >'] = 0;
            $data =  $this->Material->find('all', array('conditions' => array($condiciones, "OR" => array('Material.nombre ilike' => "%$para%", 'Material.codigo ilike' => "%$para%")), 'order' => 'Material.nombre', 'LIMIT' => 500));

            $this->set('codFam', $codFam);
            $this->set('busq', $para);
            $this->set('data', $data);
        }
    }

    public function eliminarmaterial($codFamCodi = null, $idMateCodi = null, $idTrEliminar = null) {

        $codFam = $this->Interfaz->id($codFamCodi);
        $idMate = $this->Interfaz->id($idMateCodi);

        $materialExiste = $this->FamiliaMaterial->find('first', array('conditions' => array('FamiliaMaterial.familia_id' => $codFam, 'FamiliaMaterial.material_id' => $idMate)));

        if(count($materialExiste) > 0) {
            
            $this->FamiliaMaterial->delete($materialExiste['FamiliaMaterial']['id']);

            $this->set('idTrEliminar', $idTrEliminar);
            $this->Vista->mensaje("SE ELIMINO EL PRODUCTO DEL GRUPO EXITOSAMENTE", 'EXITO');
        }
        else {
            $this->Vista->mensaje("EL MATERIAL YA NO EXISTE EN EL GRUPO", 'ERROR');
            $this->render('../' . PRINCIPAL . '/mensajes');
        }
    }

    //PAQUETES

    public function paquetes($busq = null) {

        $this->permisos_menu_individual('PAQUETES POR RUBRO');
        $this->Vista->title("Paquetes Tecnologicos");

        $listaRubros = $this->Rubro->find('all');
        $this->set('listaRubros', $listaRubros);
    }

    public function cargarrestriccion($idRubro = null) { 

        $this->permisos_opcion_individual('PAQUETES POR RUBRO', 'ESTATUS', 'AGREGAR');
        $idRubro = $this->Interfaz->id($idRubro);

        $this->Receta->recursive = 2;
        $listadoRestricciones = $this->Receta->find('all', array('conditions' => array('Receta.rubro_id' => $idRubro),  'order' => 'Rubro.nombre'));


        $this->set('listadoRestricciones', $listadoRestricciones);
        $this->set('idRubro', $idRubro);
    }

     public function buscargrupo($idRubro = null, $dato = null) {

        $idRubro = $this->Interfaz->id($idRubro);

        if (isset($dato) && !empty($dato)) {
            
            $listadoGrupos = $this->Familia->find('all', array('conditions' => array('Familia.nombre ILIKE' => "%$dato%"), 'order' => 'Familia.nombre'));

            $this->set('busq', $dato);
            $this->set('listadoGrupos', $listadoGrupos);
            $this->set('idRubro', $idRubro);
        }
    }

    public function indicargrupo($idRubroEncry = null, $idFamiEncry = null) {

        $idRubro = $this->Interfaz->id($idRubroEncry);
        $idFami = $this->Interfaz->id($idFamiEncry);

        $recetaExiste = $this->Receta->find('first', array('conditions' => array('Receta.familia_id' => $idFami, 'Receta.rubro_id' => $idRubro)));

        if(count($recetaExiste) == 0) {
            
            $this->set('idRubro', $idRubroEncry);
            $this->set('idFami', $idFamiEncry);

            $datosSupervisacion = $this->Supervisacion->find('list', array('fields' => 'Supervisacion.id, Supervisacion.nombre'));
            $this->set('datosSupervisacion', $datosSupervisacion); 

            $datosFamilia = $this->Familia->find('first', array('conditions' => array('Familia.id' => $idFami)));
            $this->set('datosFamilia', $datosFamilia);
        }
        else {
            $this->Vista->mensaje("El Grupo ya existe en el paquete", 'ERROR');
            $this->render('../' . PRINCIPAL . '/mensajes');
        }
    }

    public function agregargrupo($idFamiEncry = null, $idRubroEncry = null, $limite = null, $periodo = null, $ventana = null) {

        $idFami = $this->Interfaz->id($idFamiEncry);
        $idRubro = $this->Interfaz->id($idRubroEncry);

        $recetaExiste = $this->Receta->find('first', array('conditions' => array('Receta.familia_id' => $idFami, 'Receta.rubro_id' => $idRubro)));

        if(count($recetaExiste) == 0 and $limite > 0 and $periodo != '') {
            $arregloGuardar['Receta']['familia_id'] = $idFami;
            $arregloGuardar['Receta']['rubro_id'] = $idRubro;
            $arregloGuardar['Receta']['supervisacion_id'] = $periodo;
            $arregloGuardar['Receta']['limite'] = $this->Interfaz->miles_postgres($limite);
            
            $this->Receta->save($arregloGuardar);
            $this->set('idFami', $idFamiEncry);
            $this->set('idRubro', $idRubroEncry);
            $this->set('limite', $limite);

            $datosSupervisacion = $this->Supervisacion->find('all', array('conditions' => array('Supervisacion.id' => $periodo)));
            $this->set('datosSupervisacion', $datosSupervisacion); 

            $datosFamilia = $this->Familia->find('all', array('conditions' => array('Familia.id' => $idFami)));
            $this->set('datosFamilia', $datosFamilia);

            $this->Vista->mensaje("SE AGREGO EL GRUPO EXITOSAMENTE", 'EXITO');
            $this->Vista->cerrar_ventana($ventana);
        }
        else {
            if(count($recetaExiste) > 0) {
                $this->Vista->mensaje("Este Grupo ya existe en el Rubro", 'ERROR');
            }
            else {
                $mensajeError = ($limite > 0) ? 'Debe indicar un periodo de tiempo valido' : 'El limite debe ser mayor a 0';
                $this->Vista->mensaje($mensajeError, 'ERROR');
            }
            $this->render('../' . PRINCIPAL . '/mensajes');
        }
    }

    public function eliminargrupo($idRubroEncry = null, $idFamiEncry = null, $idTrEliminar = null) {

        $idFami = $this->Interfaz->id($idFamiEncry);
        $idRubro = $this->Interfaz->id($idRubroEncry);

        $recetaExiste = $this->Receta->find('first', array('conditions' => array('Receta.familia_id' => $idFami, 'Receta.rubro_id' => $idRubro)));

        if(count($recetaExiste) > 0) {
            
            $this->Receta->delete($recetaExiste['Receta']['id']);

            $this->set('idTrEliminar', $idTrEliminar);
            $this->Vista->mensaje("SE ELIMINO EL GRUPO EXITOSAMENTE", 'EXITO');
        }
        else {
            $this->Vista->mensaje("EL GRUPO YA NO EXISTE", 'ERROR');
            $this->render('../' . PRINCIPAL . '/mensajes');
        }
    }

    public function editarreceta($idRubroEncry = null, $idFamiEncry = null, $random = null) {

        $idRubro = $this->Interfaz->id($idRubroEncry);
        $idFami = $this->Interfaz->id($idFamiEncry);

        $recetaExiste = $this->Receta->find('first', array('conditions' => array('Receta.familia_id' => $idFami, 'Receta.rubro_id' => $idRubro)));

        if(count($recetaExiste) > 0) {
            
            $this->set('idRubro', $idRubroEncry);
            $this->set('idFami', $idFamiEncry);

            $datosSupervisacion = $this->Supervisacion->find('list', array('fields' => 'Supervisacion.id, Supervisacion.nombre'));
            $this->set('datosSupervisacion', $datosSupervisacion); 

            $datosFamilia = $this->Familia->find('first', array('conditions' => array('Familia.id' => $idFami)));
            $this->set('datosFamilia', $datosFamilia);
            $this->set('datosReceta', $recetaExiste);
            $this->set('random', $random);
        }
        else {
            $this->Vista->mensaje("El Grupo ya no existe en el paquete", 'ERROR');
            $this->render('../' . PRINCIPAL . '/mensajes');
        }
    }

    public function actualizarreceta($idRecetaEncry = null, $random = null, $limite = null, $periodo = null, $ventana = null)  {

        $idReceta = $this->Interfaz->id($idRecetaEncry);
        $this->set('random', $random);

        $recetaExiste = $this->Receta->find('first', array('conditions' => array('Receta.id' => $idReceta)));

        if(count($recetaExiste) > 0 and $limite > 0 and $periodo != '') {

            $arregloGuardar['Receta']['supervisacion_id'] = $periodo;
            $arregloGuardar['Receta']['limite'] = $this->Interfaz->miles_postgres($limite);
            $arregloGuardar['Receta']['id'] = $idReceta;
            
            $this->Receta->save($arregloGuardar);
            
            $datosSupervisacion = $this->Supervisacion->find('first', array('conditions' => array('Supervisacion.id' => $periodo)));

            echo '<script type="text/javascript">
                document.getElementById("tdGruLimite_'. $random . '").innerHTML = "' . $limite. '";
                document.getElementById("tdGruMedida_'. $random . '").innerHTML = "' . $datosSupervisacion['Supervisacion']['nombre'] . '";
            </script>';

            $this->Vista->mensaje("Se ha actualizado con exito el grupo", 'EXITO');
            $this->Vista->cerrar_ventana($ventana);
        }
        else {

            if(count($recetaExiste) > 0) {
                $mensajeError = ($limite > 0) ? 'Debe indicar un periodo de tiempo valido' : 'El limite debe ser mayor a 0';
            }
            else {
                $mensajeError = 'El Grupo ya no existe en el paquete';
            }

            $this->Vista->mensaje($mensajeError, 'ERROR');
        }
        
        $this->render('../' . PRINCIPAL . '/mensajes');
    }

}
//class
?>